package com.dimples.dd.system.model.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.dimples.dd.tenant.core.dataobject.TenantBaseDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.List;

/**
 * 短信模板
 */
@Schema(description = "短信模板")
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "system_sms_template", autoResultMap = true)
public class SystemSmsTemplateDO extends TenantBaseDO {

    // ========= 模板相关字段 ========= //

    /**
     * 编号
     */
    @TableId(value = "id", type = IdType.AUTO)
    @Schema(description = "编号")
    private Long id;

    /**
     * 短信类型
     * <p>
     * 枚举 {@link com.dimples.dd.system.enums.sms.SmsTemplateTypeEnum}
     */
    @TableField(value = "`type`")
    @Schema(description = "模板类型")
    private Byte type;

    /**
     * 启用状态
     * <p>
     * 枚举 {@link com.dimples.dd.common.enums.CommonStatusEnum}
     */
    @TableField(value = "`status`")
    @Schema(description = "开启状态")
    private Integer status;

    /**
     * 模板编码
     */
    @TableField(value = "code")
    @Schema(description = "模板编码")
    private String code;

    /**
     * 模板名称
     */
    @TableField(value = "`name`")
    @Schema(description = "模板名称")
    private String name;

    /**
     * 模板内容
     * <p>
     * 内容的参数，使用 {} 包括，例如说 {name}
     */
    @TableField(value = "content")
    @Schema(description = "模板内容")
    private String content;

    /**
     * 参数数组(自动根据内容生成)
     */
    @TableField(value = "params", typeHandler = JacksonTypeHandler.class)
    @Schema(description = "参数数组")
    private List<String> params;

    /**
     * 备注
     */
    @TableField(value = "remark")
    @Schema(description = "备注")
    private String remark;

    /**
     * 短信 API 的模板编号
     */
    @TableField(value = "api_template_id")
    @Schema(description = "短信 API 的模板编号")
    private String apiTemplateId;

    // ========= 渠道相关字段 ========= //

    /**
     * 短信渠道编号
     * <p>
     * 关联 {@link SystemSmsChannelDO#getId()}
     */
    @TableField(value = "channel_id")
    @Schema(description = "短信渠道编号")
    private Long channelId;

    /**
     * 短信渠道编码
     * <p>
     * 冗余 {@link SystemSmsChannelDO#getCode()}
     */
    @TableField(value = "channel_code")
    @Schema(description = "短信渠道编码")
    private String channelCode;
}